<?php

require_once ('AbstractModel.php');

class UtilisateurBDD extends AbstractModel
{
	// Préparation des requêtes
	var $_truncate;
	var $_insert;
	var $_update;
	var $_selectAll;
	var $_select;
	var $_selectCredential;
	var $_delete;
	
	var $_update_nom;
	var $_update_prenom;
	var $_update_mdp;
	var $_update_admin;
	var $_update_sexe;
	var $_update_date_naissance;
	var $_update_nom_entreprise;
	var $_update_adresse_domicile;
	var $_update_complement_adresse_domicile;
	var $_update_code_postal_domicile;
	var $_update_commune_domicile;
	var $_update_adresse_livraison;
	var $_update_complement_livraison;
	var $_update_code_postal_livraison;
	var $_update_commune_livraison;
	var $_update_telephone;
	var $_update_email;
	var $_update_commentaires;
	var $_update_type_abonnement;
	var $_update_date_inscription;
	var $_update_subvention_entreprise_annuel;
	var $_update_mode_paiement;
	var $_update_iban;
	
	public function __construct()
    {
        parent::__construct('UTILISATEURS');
		
		$this->_truncate = $this->_db->prepare('TRUNCATE UTILISATEURS');
		$this->_insert = $this->_db->prepare('INSERT INTO UTILISATEURS (nom, prenom, mdp, admin, sexe, date_naissance, nom_entreprise, adresse_domicile, complement_adresse_domicile, code_postal_domicile, commune_domicile, adresse_livraison, complement_livraison, code_postal_livraison, commune_livraison, telephone, email, commentaires, type_abonnement, date_inscription, subvention_entreprise_annuel, mode_paiement, iban) VALUES (? ,? ,? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , NOW(), ?, ?, ?);');

		$this->_update = $this->_db->prepare('UPDATE UTILISATEURS SET ? WHERE idUtilisateur=?;');
		$this->_update_nom = $this->_db->prepare('UPDATE UTILISATEURS SET nom = :value WHERE idUtilisateur=:idUtilisateur;');
		$this->_update_prenom = $this->_db->prepare('UPDATE UTILISATEURS SET prenom = :value WHERE idUtilisateur=:idUtilisateur;');
		$this->_update_mdp = $this->_db->prepare('UPDATE UTILISATEURS SET mdp = :value WHERE idUtilisateur=:idUtilisateur;');
		$this->_update_sexe = $this->_db->prepare('UPDATE UTILISATEURS SET sexe = :value WHERE idUtilisateur=:idUtilisateur;');
		$this->_update_date_naissance = $this->_db->prepare('UPDATE UTILISATEURS SET date_naissance = :value WHERE idUtilisateur=:idUtilisateur;');
		$this->_update_nom_entreprise = $this->_db->prepare('UPDATE UTILISATEURS SET nom_entreprise = :value WHERE idUtilisateur=:idUtilisateur;');
		$this->_update_adresse_domicile = $this->_db->prepare('UPDATE UTILISATEURS SET adresse_domicile = :value WHERE idUtilisateur=:idUtilisateur;');
		$this->_update_complement_adresse_domicile = $this->_db->prepare('UPDATE UTILISATEURS SET complement_adresse_domicile = :value WHERE idUtilisateur=:idUtilisateur;');
		$this->_update_code_postal_domicile = $this->_db->prepare('UPDATE UTILISATEURS SET code_postal_domicile = :value WHERE idUtilisateur=:idUtilisateur;');
		$this->_update_commune_domicile = $this->_db->prepare('UPDATE UTILISATEURS SET commune_domicile = :value WHERE idUtilisateur=:idUtilisateur;');
		$this->_update_adresse_livraison = $this->_db->prepare('UPDATE UTILISATEURS SET adresse_livraison = :value WHERE idUtilisateur=:idUtilisateur;');
		$this->_update_complement_livraison = $this->_db->prepare('UPDATE UTILISATEURS SET complement_livraison = :value WHERE idUtilisateur=:idUtilisateur;');
		$this->_update_code_postal_livraison = $this->_db->prepare('UPDATE UTILISATEURS SET code_postal_livraison = :value WHERE idUtilisateur=:idUtilisateur;');
		$this->_update_commune_livraison = $this->_db->prepare('UPDATE UTILISATEURS SET commune_livraison = :value WHERE idUtilisateur=:idUtilisateur;');
		$this->_update_telephone = $this->_db->prepare('UPDATE UTILISATEURS SET telephone = :value WHERE idUtilisateur=:idUtilisateur;');
		$this->_update_email = $this->_db->prepare('UPDATE UTILISATEURS SET email = :value WHERE idUtilisateur=:idUtilisateur;');
		$this->_update_commentaires = $this->_db->prepare('UPDATE UTILISATEURS SET commentaires = :value WHERE idUtilisateur=:idUtilisateur;');
		$this->_update_type_abonnement = $this->_db->prepare('UPDATE UTILISATEURS SET type_abonnement = :value WHERE idUtilisateur=:idUtilisateur;');
		$this->_update_date_inscription = $this->_db->prepare('UPDATE UTILISATEURS SET date_inscription = :value WHERE idUtilisateur=:idUtilisateur;');
		$this->_update_subvention_entreprise_annuel = $this->_db->prepare('UPDATE UTILISATEURS SET subvention_entreprise_annuel = :value WHERE idUtilisateur=:idUtilisateur;');
		$this->_update_mode_paiement = $this->_db->prepare('UPDATE UTILISATEURS SET mode_paiement = :value WHERE idUtilisateur=:idUtilisateur;');
		$this->_update_iban = $this->_db->prepare('UPDATE UTILISATEURS SET iban = :value WHERE idUtilisateur=:idUtilisateur;');
		
		
		$this->_selectAll = $this->_db->prepare('SELECT * FROM UTILISATEURS');
		$this->_selectAll->setFetchMode(PDO::FETCH_ASSOC); // Facultatif
		
		$this->_select = $this->_db->prepare('SELECT * FROM UTILISATEURS WHERE email= ?');
		$this->_select->setFetchMode(PDO::FETCH_ASSOC); // Facultatif
		
		$this->_selectCredential = $this->_db->prepare('SELECT email, mdp, admin FROM UTILISATEURS WHERE email=?');
		$this->_selectCredential->setFetchMode(PDO::FETCH_ASSOC); // Facultatif
		$this->_delete = $this->_db->prepare('DELETE FROM UTILISATEURS WHERE idUtilisateur= ?');
    }
	
	public function addUser($nom,$prenom,$mdp,$admin,$sexe,$date_naissance,$nom_entreprise,$adresse_domicile,$complement_adresse_domicile,$code_postal_domicile,$commune_domicile,$adresse_livraison,$complement_livraison,$code_postal_livraison,$commune_livraison,$telephone,$email,$commentaires,$type_abonnement,$date_inscription,$subvention_entreprise_annuel,$mode_paiement,$iban)
{
	// On sécurise les entrées
	//$id = strip_tags($id);
	$nom = strip_tags($nom);
	$prenom = strip_tags($prenom);
	$mdp = strip_tags($mdp);
	$admin = strip_tags($admin);
	$sexe = strip_tags($sexe);
	$date_naissance = strip_tags($date_naissance);
	$nom_entreprise = strip_tags($nom_entreprise);
	$adresse_domicile = strip_tags($adresse_domicile);
	$complement_adresse_domicile = strip_tags($complement_adresse_domicile);
	$code_postal_domicile = strip_tags($code_postal_domicile);
	$commune_domicile = strip_tags($commune_domicile);
	$adresse_livraison = strip_tags($adresse_livraison);
	$complement_livraison = strip_tags($complement_livraison);
	$code_postal_livraison = strip_tags($code_postal_livraison);
	$commune_livraison = strip_tags($commune_livraison);
	$telephone = strip_tags($telephone);
	$email = strip_tags($email);
	$commentaires = strip_tags($commentaires);
	$type_abonnement = strip_tags($type_abonnement);
	$subvention_entreprise_annuel = strip_tags($subvention_entreprise_annuel);
	$mode_paiement = strip_tags($mode_paiement);
	$iban = strip_tags($iban);

	try{
			if ( $this->_insert->execute(array($nom,$prenom,$mdp,$admin,$sexe,$date_naissance,$nom_entreprise,$adresse_domicile,$complement_adresse_domicile,$code_postal_domicile,$commune_domicile,$adresse_livraison,$complement_livraison,$code_postal_livraison,$commune_livraison,$telephone,$email,$commentaires,$type_abonnement,$subvention_entreprise_annuel,$mode_paiement,$iban)) )
			{
				echo "SUCCESS : L'utilisateur à été ajouté à la base de donnée";
			}else{
				echo "FAILURE : Impossible de créer l'utilisateur en BDD !";
			}
		}
		catch(Exception $e)
		{
			echo "Échec : " . $e->getMessage();
		}
	}
	
	public function update($idUtilisateur, $attribute, $value)
	{
		// Sécurisation des données en entrée
		$idUtilisateur = intval(strip_tags($idUtilisateur));
		$value = strip_tags($value);
		
		try{
			if ( $attribute == 'nom'){
				$this->_update_nom->bindParam(':idUtilisateur', $idUtilisateur, PDO::PARAM_INT);
				$this->_update_nom->bindParam(':value', $value, PDO::PARAM_STR);		
				$this->_update_nom->execute();
			}elseif ( $attribute == 'prenom' ) {
				$this->_update_prenom->bindParam(':idUtilisateur', $idUtilisateur, PDO::PARAM_INT);
				$this->_update_prenom->bindParam(':value', $value, PDO::PARAM_STR);
				$this->_update_prenom->execute();
			}elseif ( $attribute == 'mdp' ) {	
				$this->_update_mdp->bindParam(':idUtilisateur', $idUtilisateur, PDO::PARAM_INT);
				$this->_update_mdp->bindParam(':value', $value, PDO::PARAM_STR);
				$this->_update_mdp->execute();
			}elseif ( $attribute == 'admin' ) {	
				$this->_update_admin->bindParam(':idUtilisateur', $idUtilisateur, PDO::PARAM_INT);
				$this->_update_admin->bindParam(':value', $value, PDO::PARAM_STR);
				$this->_update_admin->execute();
			}elseif ( $attribute == 'sexe' ) {	
				$this->_update_sexe->bindParam(':idUtilisateur', $idUtilisateur, PDO::PARAM_INT);
				$this->_update_sexe->bindParam(':value', $value, PDO::PARAM_STR);
				$this->_update_sexe->execute();
			}elseif ( $attribute == 'date_naissance' ) {	
				$this->_update_date_naissance->bindParam(':idUtilisateur', $idUtilisateur, PDO::PARAM_INT);
				$this->_update_date_naissance->bindParam(':value', $value, PDO::PARAM_STR);
				$this->_update_date_naissance->execute();
			}elseif ( $attribute == 'nom_entreprise') {	
				$this->_update_nom_entreprise->bindParam(':idUtilisateur', $idUtilisateur, PDO::PARAM_INT);
				$this->_update_nom_entreprise->bindParam(':value', $value, PDO::PARAM_STR);
				$this->_update_nom_entreprise->execute();
			}elseif ( $attribute == 'adresse_domicile') {	
				$this->_update_adresse_domicile->bindParam(':idUtilisateur', $idUtilisateur, PDO::PARAM_INT);
				$this->_update_adresse_domicile->bindParam(':value', $value, PDO::PARAM_STR);
				$this->_update_adresse_domicile->execute();
			}elseif ( $attribute == 'complement_adresse_domicile') {
				$this->_update_complement_adresse_domicile->bindParam(':idUtilisateur', $idUtilisateur, PDO::PARAM_INT);
				$this->_update_complement_adresse_domicile->bindParam(':value', $value, PDO::PARAM_STR);
				$this->_update_complement_adresse_domicile->execute();
			}elseif ( $attribute == 'code_postal_domicile') {	
				$this->_update_code_postal_domicile->bindParam(':idUtilisateur', $idUtilisateur, PDO::PARAM_INT);
				$this->_update_code_postal_domicile->bindParam(':value', $value, PDO::PARAM_INT);
				$this->_update_code_postal_domicile->execute();
			}elseif ( $attribute == 'commune_domicile') {	
				$this->_update_commune_domicile->bindParam(':idUtilisateur', $idUtilisateur, PDO::PARAM_INT);
				$this->_update_commune_domicile->bindParam(':value', $value, PDO::PARAM_STR);
				$this->_update_commune_domicile->execute();
			}elseif ( $attribute == 'adresse_livraison') {	
				$this->_update_adresse_livraison->bindParam(':idUtilisateur', $idUtilisateur, PDO::PARAM_INT);
				$this->_update_adresse_livraison->bindParam(':value', $value, PDO::PARAM_STR);
				$this->_update_adresse_livraison->execute();
			}elseif ( $attribute == 'complement_livraison') {	
				$this->_update_complement_livraison->bindParam(':idUtilisateur', $idUtilisateur, PDO::PARAM_INT);
				$this->_update_complement_livraison->bindParam(':value', $value, PDO::PARAM_STR);
				$this->_update_complement_livraison->execute();
			}elseif ( $attribute == 'code_postal_livraison') {	
				$this->_update_code_postal_livraison->bindParam(':idUtilisateur', $idUtilisateur, PDO::PARAM_INT);
				$this->_update_code_postal_livraison->bindParam(':value', $value, PDO::PARAM_INT);
				$this->_update_code_postal_livraison->execute();
			}elseif ( $attribute == 'commune_livraison') {	
				$this->_update_commune_livraison->bindParam(':idUtilisateur', $idUtilisateur, PDO::PARAM_INT);
				$this->_update_commune_livraison->bindParam(':value', $value, PDO::PARAM_STR);
				$this->_update_commune_livraison->execute();
			}elseif ( $attribute == 'telephone') {	
				$this->_update_telephone->bindParam(':idUtilisateur', $idUtilisateur, PDO::PARAM_INT);
				$this->_update_telephone->bindParam(':value', $value, PDO::PARAM_INT);
				$this->_update_telephone->execute();
			}elseif ( $attribute == 'email') {	
				$this->_update_email->bindParam(':idUtilisateur', $idUtilisateur, PDO::PARAM_INT);
				$this->_update_email->bindParam(':value', $value, PDO::PARAM_STR);
				$this->_update_email->execute();
			}elseif ( $attribute == 'commentaires') {	
				$this->_update_commentaires->bindParam(':idUtilisateur', $idUtilisateur, PDO::PARAM_INT);
				$this->_update_commentaires->bindParam(':value', $value, PDO::PARAM_STR);
				$this->_update_commentaires->execute();
			}elseif ( $attribute == 'type_abonnement') {	
				$this->_update_type_abonnement->bindParam(':idUtilisateur', $idUtilisateur, PDO::PARAM_INT);
				$this->_update_type_abonnement->bindParam(':value', $value, PDO::PARAM_STR);
				$this->_update_type_abonnement->execute();
			}elseif ( $attribute == 'date_inscription') {	
				$this->_update_date_inscription->bindParam(':idUtilisateur', $idUtilisateur, PDO::PARAM_INT);
				$this->_update_date_inscription->bindParam(':value', $value, PDO::PARAM_STR);
				$this->_update_date_inscription->execute();
			}elseif ( $attribute == 'subvention_entreprise_annuel') {	
				$this->_update_subvention_entreprise_annuel->bindParam(':idUtilisateur', $idUtilisateur, PDO::PARAM_INT);
				$this->_update_subvention_entreprise_annuel->bindParam(':value', $value, PDO::PARAM_STR);
				$this->_update_subvention_entreprise_annuel->execute();
			}elseif ( $attribute == 'mode_paiement') {	
				$this->_update_mode_paiement->bindParam(':idUtilisateur', $idUtilisateur, PDO::PARAM_INT);
				$this->_update_mode_paiement->bindParam(':value', $value, PDO::PARAM_STR);
				$this->_update_mode_paiement->execute();
			}elseif ( $attribute == 'iban') {	
				$this->_update_iban->bindParam(':idUtilisateur', $idUtilisateur, PDO::PARAM_INT);
				$this->_update_iban->bindParam(':value', $value, PDO::PARAM_STR);
				$this->_update_iban->execute();
			}
			
			echo "La modification de l'utilisateur à été effectuée avec succés :)";
		}
		catch(Exception $e)
		{
			echo "Échec : " . $e->getMessage();
		}
	}
	
	public function getUserCredential($email)
	{
		// Sécurisation données en entré
		$email = strip_tags($email);
		try{
			$this->_selectCredential->execute(array($email));
			return $loginInfo = $this->_selectCredential->fetchAll();
		}
		catch(Exception $e)
		{
			echo "Échec : " . $e->getMessage();
		}
	}
	
		
	public  function fetchUser($email)
	{
		$this->_select->execute(array($email));
		return $user = $this->_select->fetchAll();
	}
	
	public  function fetchAllUsers()
	{
		$this->_selectAll->execute();
		return $users = $this->_selectAll->fetchAll();
	}

	
	public  function delete($idUtilisateur)
	{
		$this->_delete->execute(array($idUtilisateur));
	}
 
}
